package com.ruoyi.campus.service;

import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

/**
 * 媒体文件处理Service接口
 * 
 * @author campus-alarm
 * @date 2024-01-01
 */
public interface IMediaProcessService
{
    /**
     * 压缩图片
     * 
     * @param file 图片文件
     * @param quality 压缩质量 (0.0-1.0)
     * @param maxWidth 最大宽度
     * @param maxHeight 最大高度
     * @return 处理结果
     */
    Map<String, Object> compressImage(MultipartFile file, Float quality, Integer maxWidth, Integer maxHeight) throws Exception;

    /**
     * 生成图片缩略图
     * 
     * @param file 图片文件
     * @param width 缩略图宽度
     * @param height 缩略图高度
     * @return 处理结果
     */
    Map<String, Object> generateThumbnail(MultipartFile file, Integer width, Integer height) throws Exception;

    /**
     * 图片格式转换
     * 
     * @param file 图片文件
     * @param targetFormat 目标格式 (jpg, png, webp等)
     * @return 处理结果
     */
    Map<String, Object> convertImageFormat(MultipartFile file, String targetFormat) throws Exception;

    /**
     * 图片水印处理
     * 
     * @param file 图片文件
     * @param watermarkText 水印文字
     * @param watermarkImage 水印图片路径
     * @param position 水印位置
     * @param opacity 透明度
     * @return 处理结果
     */
    Map<String, Object> addWatermark(MultipartFile file, String watermarkText, String watermarkImage, 
                                    String position, Float opacity) throws Exception;

    /**
     * 音频转码
     * 
     * @param file 音频文件
     * @param targetFormat 目标格式 (mp3, wav, aac等)
     * @param bitrate 比特率
     * @return 处理结果
     */
    Map<String, Object> convertAudio(MultipartFile file, String targetFormat, Integer bitrate) throws Exception;

    /**
     * 音频剪切
     * 
     * @param file 音频文件
     * @param startTime 开始时间(秒)
     * @param duration 持续时间(秒)
     * @return 处理结果
     */
    Map<String, Object> cutAudio(MultipartFile file, Integer startTime, Integer duration) throws Exception;

    /**
     * 音频合并
     * 
     * @param files 音频文件列表
     * @param outputFormat 输出格式
     * @return 处理结果
     */
    Map<String, Object> mergeAudio(MultipartFile[] files, String outputFormat) throws Exception;

    /**
     * 视频转码
     * 
     * @param file 视频文件
     * @param targetFormat 目标格式 (mp4, avi, mov等)
     * @param resolution 分辨率 (720p, 1080p等)
     * @return 处理结果
     */
    Map<String, Object> convertVideo(MultipartFile file, String targetFormat, String resolution) throws Exception;

    /**
     * 视频截图
     * 
     * @param file 视频文件
     * @param timePoint 截图时间点(秒)
     * @param width 截图宽度
     * @param height 截图高度
     * @return 处理结果
     */
    Map<String, Object> captureVideoFrame(MultipartFile file, Integer timePoint, Integer width, Integer height) throws Exception;

    /**
     * 视频剪切
     * 
     * @param file 视频文件
     * @param startTime 开始时间(秒)
     * @param duration 持续时间(秒)
     * @return 处理结果
     */
    Map<String, Object> cutVideo(MultipartFile file, Integer startTime, Integer duration) throws Exception;

    /**
     * 提取视频信息
     * 
     * @param file 视频文件
     * @return 视频信息
     */
    Map<String, Object> extractVideoInfo(MultipartFile file) throws Exception;

    /**
     * 提取音频信息
     * 
     * @param file 音频文件
     * @return 音频信息
     */
    Map<String, Object> extractAudioInfo(MultipartFile file) throws Exception;

    /**
     * 提取图片信息
     * 
     * @param file 图片文件
     * @return 图片信息
     */
    Map<String, Object> extractImageInfo(MultipartFile file) throws Exception;

    /**
     * 检查媒体文件类型
     * 
     * @param file 文件
     * @return 媒体类型信息
     */
    Map<String, Object> checkMediaType(MultipartFile file) throws Exception;

    /**
     * 异步处理媒体文件
     * 
     * @param file 媒体文件
     * @param processType 处理类型
     * @param params 处理参数
     * @return 处理任务ID
     */
    String processMediaAsync(MultipartFile file, String processType, Map<String, Object> params) throws Exception;

    /**
     * 获取异步处理状态
     * 
     * @param taskId 任务ID
     * @return 处理状态
     */
    Map<String, Object> getProcessStatus(String taskId) throws Exception;
} 